/**
 * 展示等待窗口
 * @param msg 消息
 */
export const showLoading = (msg) => {
  uni
    .showLoading({
      title: msg,
      mask: true,
    })
    .then((r) => {
      console.log(r);
    });
};

/**
 * 关闭等待窗口
 */
export const hideLoading = () => {
  uni.hideLoading();
};

export const showModalNoCancel = (title, content, success) => {
  uni.showModal({
    title: title || "消息",
    content: content || "功能异常请确认",
    showCancel: false,
    success: (res) => {
      console.log(res);

      return success?.(res); // 安全调用
    },
  });
};

/**
 * 灵活模态框（取消按钮可选，支持确认/取消回调区分）
 * @param {Object} options - 模态框配置项（整合参数，更易扩展）
 *   - title: 模态框标题（默认："消息"）
 *   - content: 模态框内容（默认："请确认操作"）
 *   - showCancel: 是否显示取消按钮（默认：true，支持显隐控制）
 *   - confirmText: 确认按钮文字（默认："确认"，自定义文案）
 *   - cancelText: 取消按钮文字（默认："取消"，自定义文案）
 * @param {Function} callback - 回调函数（返回操作状态，区分确认/取消/失败）
 *   - 参数1: result 对象 { confirm: boolean, error: boolean, res: 原始响应 }
 *     - confirm: true=点击确认，false=点击取消/操作失败
 *     - error: true=模态框调用失败，false=正常操作
 *     - res: 微信/uni的原始响应数据（便于特殊场景使用）
 */
export const showModal = (options = {}, callback) => {
  // 1. 解构配置项，设置默认值（核心：showCancel默认true，支持手动传false隐藏）
  const {
    title = "消息",
    content = "请确认操作",
    showCancel = true, // 取消按钮默认显示，传false则隐藏（兼容原showModalNoCancel功能）
    confirmText = "确认",
    cancelText = "取消",
  } = options;

  // 2. 调用uni模态框API
  uni.showModal({
    title,
    content,
    showCancel,
    confirmText,
    cancelText,
    // 3. 成功回调（用户点击确认/取消）
    success: (res) => {
      console.log("模态框操作结果:", res);
      // 执行回调，传递明确的操作状态
      if (typeof callback === "function") {
        callback({
          confirm: res.confirm, // true=确认，false=取消
          error: false, // 无错误
          res: res, // 原始响应
        });
      }
    },
    // 4. 失败回调（如模态框调用异常，如环境限制）
    fail: (err) => {
      console.error("模态框调用失败:", err);
      // 失败时也通知回调，便于业务处理错误
      if (typeof callback === "function") {
        callback({
          confirm: false, // 失败视为"未确认"
          error: true, // 标记错误状态
          res: err, // 错误信息
        });
      }
    },
  });
};

// 调用：询问用户是否购买（显示取消按钮）
// showModal(
//   {
//     title: "购买提示",
//     content: "购买后可查看完整设计方案，是否继续？",
//     confirmText: "去购买", // 自定义确认按钮文字
//     cancelText: "稍后再说" // 自定义取消按钮文字
//   },
//   (result) => {
//     if (result.error) {
//       // 处理调用失败（如环境不支持模态框）
//       uni.showToast({ title: "操作失败，请重试", icon: "none" });
//       return;
//     }

//     if (result.confirm) {
//       // 用户点击「去购买」：执行跳转支付页逻辑
//       console.log("用户确认购买，跳转支付页");
//       uni.navigateTo({ url: "/pages/pay/pay-page" });
//     } else {
//       // 用户点击「稍后再说」：执行取消逻辑（如关闭弹窗）
//       console.log("用户取消购买，关闭提示");
//       // 示例：如果是在弹窗内调用，可关闭当前弹窗
//       // this.popupVisible = false;
//     }
//   }
// );


// 调用：系统通知（无取消按钮，只有确认）
// showModal(
//   {
//     title: "系统消息",
//     content: "您的项目已通过审核，可前往查看详情",
//     showCancel: false // 隐藏取消按钮
//   },
//   (result) => {
//     if (result.error) {
//       uni.showToast({ title: "通知显示失败", icon: "none" });
//       return;
//     }

//     // 因无取消按钮，用户只能点击确认，result.confirm一定为true
//     console.log("用户确认查看，跳转项目详情页");
//     uni.navigateTo({ url: "/pages/project/detail" });
//   }
// );







export const showToast = (title) => {
  uni
    .showToast({
      title: title,
      icon: "none",
    })
    .then((r) => {});
};

export const ding_wei = () => {
  // 拉起授权并进行定位操作  在h5下需要维护key
  return new Promise((resolve, reject) => {
    uni.authorize({
      scope: "scope.userLocation",
      success() {
        uni.getLocation({
          isHighAccuracy: true,
          type: "gcj02",
          success: function (res) {
            resolve(false);
          },
        });
      },
      fail: function (err) {
        uni.showModal({
          title: "提示",
          content: "您拒绝了定位授权，若要使用该车辆，请在设置中开启定位授权。",
          confirmText: "去设置",
          success(res) {
            if (res.confirm) {
              uni.openSetting({
                success(settingRes) {
                  if (settingRes.authSetting["scope.userLocation"]) {
                    // 用户在设置中开启了定位授权，可进行定位操作
                    uni.getLocation({
                      type: "gcj02",
                      success(res) {
                        console.log("定位成功", res);
                      },
                      fail(err) {},
                    });
                  }
                },
              });
            } else {
              resolve(true); // 用户取消了去设置的操作，返回错误信息
            }
          },
        });
        return;
      },
    });
  });
};
